<?php
/**
 * Created by PhpStorm.
 * User: s.utkin
 * Date: 24.12.2014
 * Time: 17:02
 */

namespace Users\Helper;


abstract class SmartRedirect {

	protected static $config = null;

	protected function getConfig() {
		if (static::$config === null) {
			$config = \UrlRulesConfig::get('domains');
			// собираем из конфы все домены в единый список
			foreach ($config as $list) {
				static::$config = array_merge((array)static::$config, (array)$list);
			}
			static::$config[] = ''; // пустой домен, чтоб локальные рефереры

		}

		return static::$config;
	}

	protected static function checkDomain($url)
	{
		$domains = static::getConfig();
		$parseUrlData = parse_url($url);

		return in_array($parseUrlData['host'], $domains);
	}

	/**
	 * Вычисляет ключ url редиректа в хранилище
	 *
	 * @param string $context - контекст редиректа
	 * @return string
	 */
	protected static function getStorageKey($context) {
		return  'redirect_scope_' . $context;
	}

	/**
	 * Возвращает url редиректа
	 *
	 * @param string $context - контекст редиректа
	 * @return mixed|null
	 */
	public static function getRedirectPoint($context = 'default')
	{
		$storageKey = static::getStorageKey($context);
		return \Session::getValue($storageKey);
	}

	/**
	 * Записывает в хранилище url редиректа из HTTP_REFERRER
	 *
	 * @param string $context - контекст редиректа
	 */
	public static function rememberRedirectPoint($url, $context = 'default') {

		if (static::getRedirectPoint($context) !== null) {
			return;
		}

		if (!static::checkDomain($url)) {
			return;
		}

		$storageKey = static::getStorageKey($context);
		\Session::setValue($storageKey, $url);
	}

	/**
	 * Очищает хранилилще от url редиректа
	 *
	 * @param string $context - контекст редиректа
	 */
	public static function clearRedirectPoint($context = 'default') {
		$storageKey = static::getStorageKey($context);
		\Session::unsetValue($storageKey);
	}
}